<?php
/**
 * 订单类
 */
namespace app\admin\controller;
use app\admin\controller\Common;
use app\admin\model\Auths;
class Order extends Common{

	/**
	 * 展示订单列表页
	 */
	public function lst(){
		
		//分配模版标头信息变量
		$this->setPageTitle("订单列表","订单列表",url(''));

		// 获取订单信息
		$orders = $this->getOrderInfo();
		
		//分配变量
		$this->assign('orders',$orders);

		//展示视图
		return $this->fetch();
	}

	/**
	 * 展示订单详情页
	 */
	public function orderInfo(){
		
		// 分配模版标头信息变量
		$this->setPageTitle("订单详情","订单列表",url('lst'));

		// 获取订单信息
		$rid = input('id')+0;
		
		// 获取订单信息
		$order = $this->getOrderInfo( $rid );

		// 获取购货人
		$info = db('member')->field('nickname,email')->where('mid','=',$order["mid"])->find();
		$buyUser['mid'] = $order["mid"];
		$buyUser['name'] = $info["nickname"] ? $info["nickname"] : $info["email"];

		// 获取订单商品
		$goods = db('order_goods')->where('rid','=',$rid)->select();

		// 获取品牌
		$gModel = db('goods');
		$bModel = db('brand');
		$pModel = db('product');
		foreach ($goods as $k => $v) {

			// 拆分属性
			$goods[$k]["attr_value"] = str_replace(',', '<br />', $v["attr_value"]);
			
			// 获取品牌id
			$bid =  $gModel->where('gid',$v["gid"])->value('bid');

			// 获取品牌名称
			$goods[$k]["brand_name"] = $bModel->where('bid',$bid)->value('brand_name');

			// 获取库存
			$goods[$k]["sku"] = $pModel->where([ "gid"=>$v["gid"],'attr_list'=>$v["attr_ids"] ])->value('product_sku');
		}

		// 获取运费
		$shipPrice = db('ship')->where('sid','=',$order["ship_id"])->value('ship_price');

		// 获取订单日志
		$logs = db('order_log')->where('rid',$rid)->order('lid desc')->select();
		
		// 分配变量
		$this->assign('order',$order);
		$this->assign('buyUser',$buyUser);
		$this->assign('goods',$goods);
		$this->assign('shipPrice',$shipPrice);
		$this->assign('logs',$logs);

		//展示视图
		return $this->fetch();
	}

	/**
	 * 异步修改订单状态，添加操作日志
	 */
	public function changeStatus(){

		// 安全处理 
		if( !request()->isAjax() ){

			$this->error('您访问的页面不存在！');

		}

		// 接收信息
		$id = input('id')+0;
		$status_id = input('status_id')+0;
		$name = input('name');
		$info = input('msg');

		// 检测操作信息是否为空
		if(!$info){
			echo json_encode(['status'=>false,'msg'=>'操作备注不能为空！']);
			die;
		}

		// 检测是否是允许更新的字段
		$allow = ['order_status','pay_status','ship_status'];
		if( !in_array( $name, $allow )){
			echo json_encode(['status'=>false,'msg'=>'非法操作！']);
			die;
		}

		// 拼凑更新信息
		if( $name=='pay_status' ){

			if( $status_id == 1 ){

				$update = ['pay_status' => $status_id,'order_status'=>2];

			}else{

				$update = ['pay_status' => $status_id,'order_status'=>4];

			}


		}else if( $name=='order_status' &&  $status_id==3 ){

			$update = ['order_status'=>3,'ship_status' =>1,'pay_status' =>1];

		}else{

			$update = [$name => $status_id];

		}
			
		// 更新
		$orderModel = db('order');
		if( false !== $orderModel->strict(true)->where('rid','=',$id)->update( $update ) ){

			// 获取配置文件信息
			$config = config('order');

			// 获取订单的所有状态
			$status = $orderModel->field('order_status,ship_status,pay_status')->where('rid','=',$id)->find();

			// 根据状态值，获取对应字符串
			foreach ($status as $k => $v) {
				$status[$k] = $config[$k][$v][0];
			}

			// 拼凑添加订单操作信息
			$data['admin_name'] = session('username');
			$data['created'] = time();
			$data['opt_note'] = $info;
			$data['order_status'] = $status['order_status'];
			$data['ship_status'] = $status['ship_status'];
			$data['pay_status'] = $status['pay_status'];
			$data['aid'] = session('id');
			$data['rid'] = $id;

			// 添加订单操作日志
			$logModel =db('order_log');
			$logModel->strict('true')->insert($data);

			// 获取最后插入的id
			$data['id'] = $logModel->getLastInsID();
			$data['created'] = date('Y-m-d H:i:s',$data['created']);

			// 拼凑返回信息
			$msg = [];
			if( $name=='order_status' ){

				$msg['order_status'] = $config['order_status'][$status_id];

				if( $msg['order_status']['on'] &&  $status_id==2 ){

					$msg['ship_status'] = $config['ship_status'][1];

				}

			}else if( $name=='ship_status' ){

				$msg['ship_status'] = $config['ship_status'][$status_id];

				if( $msg['ship_status']['on'] &&  $status_id==4 ){

					unset($msg['ship_status']);
					$msg['pay_status'] = $config['pay_status'][1];

				}

			}

			// 返回信息
			echo json_encode(['status'=>true,'msg'=>$msg,'log'=>$data]);
			
		}else{
			
			echo json_encode(['status'=>false,'msg'=>'更新失败！']);
			
		}

	}
		
	/**
	 * 获取订单信息
	 * @param  integer $rid 订单号 0：表示获取全部
	 * @return array        返回订单信息
	 */
	private function getOrderInfo( $rid = 0, $del = 0 ){

		// 拼凑查询条件
		if( $rid ){

			$where["rid"] = $rid;

		}

		if( $del ){

			$where["is_delete"] = 1;

		}else{

			$where["is_delete"] = 0;

		}

		// 获取订单信息
		$data = db('order')->where($where)->order('rid desc')->select();

		// 获取订单的配置信息
		$status = config('order');

		// 循环修改状态和获取按钮信息
		foreach ($data as $k => $v) {

			// 订单状态
			foreach ($status["order_status"] as $k1 => $v1) {

				if( $v["order_status"] == $k1 ){

					$data[$k]["order_status"] = $v1[0];

					$data[$k]["order_btn"]["id"] = $v1[1]['id'];
					$data[$k]["order_btn"]["info"] = $v1[1]['info'];
					$data[$k]["order_btn"]["on"] = $v1['on'];
				}
				
			}

			// 物流状态
			foreach ($status["ship_status"] as $k1 => $v1) {

				if( $v["ship_status"] == $k1 ){

					$data[$k]["ship_status"] = $v1[0];
					$data[$k]["ship_btn"]["id"] = $v1[1]['id'];
					$data[$k]["ship_btn"]["info"] = $v1[1]['info'];
					$data[$k]["ship_btn"]["on"] = $v1['on'];
				
				}
				
			}

			// 支付状态
			foreach ($status["pay_status"] as $k1 => $v1) {

				if( $v["pay_status"] == $k1 ){

					$data[$k]["pay_status"] = $v1[0];
					$data[$k]["pay_btn"]["id"] = $v1[1]['id'];
					$data[$k]["pay_btn"]["info"] = $v1[1]['info'];

				}
				
			}
			
		}

		// 返回整理好的订单信息
		if( $rid ){

			return $data[0];

		}else{

			return $data;

		}
			
	}

	/**
	 * 异步将订单放入回收站
	 * @return [type] [description]
	 */
	public function recycle(){

		// 安全处理 
		if( !request()->isAjax() ){

			$this->error('您访问的页面不存在！');

		}

		// 接收信息
		$id = input('id')+0;
		$status = input('status')+0;
		if( $status ){

			$success = '删除成功';
			$error = '放入回收站失败！';

		}else{

			$success = '还原成功';
			$error = '还原失败！';

		}

		// 更新数据
		if( false !== db('order')->strict(true)->where('rid','=',$id)->update( ['is_delete' => $status] ) ){

			echo json_encode(['status'=>true,'msg'=>$success]);

		}else{
			
			echo json_encode(['status'=>false,'msg'=>$error]);
			
		}


	}

	/**
	 * 展示回收站订单列表页
	 */
	public function recycleLst(){
		
		//分配模版标头信息变量
		$this->setPageTitle("订单回收站列表","订单列表",url('lst'));

		// 获取订单信息
		$orders = $this->getOrderInfo( false, true );
		
		//分配变量
		$this->assign('orders',$orders);

		//展示视图
		return $this->fetch();
	}

	/**
	 * 异步将订单放入回收站
	 * @return [type] [description]
	 */
	public function del(){

		// 安全处理 
		if( !request()->isAjax() ){

			$this->error('您访问的页面不存在！');

		}

		// 接收信息
		$id = input('id')+0;

		// 更新数据
		if( db('order')->delete( $id ) ){

			echo json_encode(['status'=>true,'msg'=>'删除成功！']);

		}else{
			
			echo json_encode(['status'=>false,'msg'=>'删除失败！']);
			
		}


	}


}